/**
 * 应用模板管理
 */
const fs = require('fs-extra');
const path = require('path');

// 工作目录
const WORK_DIR = process.cwd();
// 包目录
const PACKAGE_DIR = path.dirname(path.dirname(__filename));

/**
 * 获取可用的应用模板
 * @returns {Promise<Array>} 模板列表
 */
async function getTemplates() {
  const templates = [];
  
  // 检查工作目录中的模板
  const workTemplatesDir = path.join(WORK_DIR, 'templates');
  
  if (fs.existsSync(workTemplatesDir)) {
    const workItems = await fs.readdir(workTemplatesDir);
    
    for (const item of workItems) {
      const templateDir = path.join(workTemplatesDir, item);
      const stats = await fs.stat(templateDir);
      
      if (stats.isDirectory()) {
        // 检查模板配置
        const configPath = path.join(templateDir, 'template.json');
        
        if (fs.existsSync(configPath)) {
          try {
            const config = await fs.readJSON(configPath);
            templates.push({
              ...config,
              id: item,
              path: templateDir,
              source: 'workspace'
            });
          } catch (err) {
            console.error(`读取模板配置失败: ${configPath}`, err);
          }
        } else {
          // 添加无配置的模板
          templates.push({
            id: item,
            name: item,
            description: '用户自定义模板',
            path: templateDir,
            source: 'workspace'
          });
        }
      }
    }
  }
  
  // 检查包目录中的模板
  const packageTemplatesDir = path.join(PACKAGE_DIR, 'templates');
  
  if (fs.existsSync(packageTemplatesDir)) {
    const packageItems = await fs.readdir(packageTemplatesDir);
    
    for (const item of packageItems) {
      // 跳过工作目录中已存在的同名模板
      if (templates.some(t => t.id === item)) {
        continue;
      }
      
      const templateDir = path.join(packageTemplatesDir, item);
      const stats = await fs.stat(templateDir);
      
      if (stats.isDirectory()) {
        // 检查模板配置
        const configPath = path.join(templateDir, 'template.json');
        
        if (fs.existsSync(configPath)) {
          try {
            const config = await fs.readJSON(configPath);
            templates.push({
              ...config,
              id: item,
              path: templateDir,
              source: 'package'
            });
          } catch (err) {
            console.error(`读取模板配置失败: ${configPath}`, err);
          }
        } else {
          // 添加无配置的模板
          templates.push({
            id: item,
            name: item,
            description: '内置模板',
            path: templateDir,
            source: 'package'
          });
        }
      }
    }
  }
  
  return templates;
}

/**
 * 获取指定模板的目录路径
 * @param {string} templateId 模板ID
 * @returns {Promise<string>} 模板目录路径
 */
async function getTemplatePath(templateId) {
  const templates = await getTemplates();
  const template = templates.find(t => t.id === templateId);
  
  if (!template) {
    throw new Error(`模板 ${templateId} 不存在`);
  }
  
  return template.path;
}

module.exports = {
  getTemplates,
  getTemplatePath
}; 